/**
 * Servlet SimulacionBiometrica: destinado a la recepcion de los parametros biometricos enviados
 * desde el cliente web (servidor bluetooth)
 */

package infb.servlet.movil;

// Importaciones externas
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;


public class SimulacionBiometrica extends HttpServlet {

    /**
     * Metodo que "interpretara" los niveles de azucar en sangre enviados por la aplicacion
     * cliente
     * @param nivelGlucosa Un entero que representa el nivel de azucar en sangre del paciente
     * @return un String con la interpretacion "ilustrativa" del parametro enviado
     */
    private String interpretarNivelGlucosa(int nivelGlucosa) {
        String interpretacion="";
        if(nivelGlucosa < 60){
            interpretacion="Niveles hipoglucemicos, peligro de desmayo!!!";
        }else if(nivelGlucosa >= 60 && nivelGlucosa <=80){
            interpretacion="Deberia tener cuidado con sus niveles de azucar...";
        }else if(nivelGlucosa > 80 && nivelGlucosa <= 105){
            interpretacion="Niveles de azucar correctos";
        }else if(nivelGlucosa > 105 && nivelGlucosa <= 130){
            interpretacion="Indicios de diabetes...Hagase una revision lo antes posible";
        }else if(nivelGlucosa > 130 && nivelGlucosa <= 180){
            interpretacion="Niveles muy altos de azucar en sangre... Acuda lo antes posible al medico";
        }else{
            interpretacion="Niveles hiperglucemicos, peligro de desmayo inminente!!!";
        }

        return interpretacion;
    }

    /**
     * Metodo que "interpretara" la temperatura corporal del paciente enviada por la aplicacion
     * cliente
     * @param presionArterial Un entero que representa la medida de la presion arterial del paciente
     * @return un String con la interpretacion "ilustrativa" del parametro enviado
     */
    private String interpretarTemperaturaCorporal(int temperaturaCorporal) {
        String interpretacion="";
        if(temperaturaCorporal < 33){
            interpretacion="Peligro de hipotermia!!!";
        }else if(temperaturaCorporal >= 33 && temperaturaCorporal <= 36){
            interpretacion="Su temperatura corporal es normal";
        }else if(temperaturaCorporal >= 37 && temperaturaCorporal <= 40){
            interpretacion="Su temperatura corporal es relativamente alta. Puede que tenga fiebre";
        }else{
            interpretacion="Esta usted mas caliente que el palo de un churrero!!!";
        }

        return interpretacion;
    }

    /**
     * Metodo que "interpretara" el valor del ritmo cardiaco o las pulsaciones del paciente
     * @param nivelGlucosa Un entero que representa el valor del ritmo cardiaco actual
     * @return un String con la interpretacion "ilustrativa" del parametro enviado
     */
    private String interpretarRitmoCardiaco(int ritmoCardiaco) {
        String interpretacion="";
        if(ritmoCardiaco==0){
            interpretacion="Tecnicamente, usted esta muerto...";
        }else if(ritmoCardiaco > 0 && ritmoCardiaco < 30){
            interpretacion="Ritmo cardiaco muy bajo. Estado de latencia...";
        }else if(ritmoCardiaco >= 30 && ritmoCardiaco < 80){
            interpretacion="Ritmo cardiaco bajo. ¿Esta relajado verdad?";
        }else if(ritmoCardiaco >= 80 && ritmoCardiaco <= 150){
            interpretacion="Ritmo cardiaco elevado. ¿Esta practicando deporte?";
        }else {
            interpretacion="Ritmo cardiaco muy elevado. Tenga cuidado...";
        }

        return interpretacion;
    }
   
    /** 
     * Procesa la peticion del cliente (que recordemos se trataba de un servidor bluetooth)
     * y en funcion de la medida del parametro biometrico en cuestion, devuelve una respuesta
     * meramente ilustrativa
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    protected void procesarPeticion(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        // Aqui ira previamente todo el codigo de mantemiento de estado de sesion
        // Inicializacion de los flujos
        DataOutputStream salidaHaciaCliente=new DataOutputStream(respuesta.getOutputStream());
        // Procesamos el mensaje enviado por el cliente (Codigo de Parametro Biometrico - Medida)
        int parametroBio=Integer.parseInt(peticion.getParameter("parametro"));
        int medida=Integer.parseInt(peticion.getParameter("medida"));
        String interpretacion="";
        switch(parametroBio){
            case ParametrosBiometricos.NIVEL_GLUCOSA:
                interpretacion=interpretarNivelGlucosa(medida);
                break;
            case ParametrosBiometricos.TEMPERATURA_CORPORAL:
                interpretacion=interpretarTemperaturaCorporal(medida);
                break;
            case ParametrosBiometricos.RITMO_CARDIACO:
                interpretacion=interpretarRitmoCardiaco(medida);
                break;
        }
        // Enviamos la respuesta al cliente 
        salidaHaciaCliente.writeUTF(interpretacion);
        salidaHaciaCliente.flush();
        // Cerramos los flujos
        salidaHaciaCliente.close();
    } 

    /**
     * Procesamiento de peticiones cliente GET
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doGet(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    } 

    /**
     * Procesamiento de peticiones cliente POST
     * @param peticion El objeto que encapsula la peticion del cliente
     * @param response El objeto que encapsula la respuesta del servidor a la peticion en cuestion
     * @throws ServletException Si ocurre un error especifico de servlet
     * @throws IOException Si ocurre un error de entrada/salida
     */
    @Override
    protected void doPost(HttpServletRequest peticion,HttpServletResponse respuesta)
    throws ServletException,IOException {
        procesarPeticion(peticion,respuesta);
    }

    /** 
     * Devuelve una descripcion de la funcionalidad del servlet
     * @return un String con la descripcion del servlet
     */
    @Override
    public String getServletInfo() {
        return "Servlet destinado al procesamiento de las medidas biometricas enviadas por el servidor bluetooth de simulacion";
    }

}
